package vip.liux.contracts.models.identity;

import vip.liux.contracts.models.identity.vo.UserLoginInfo;

import java.util.List;
import java.util.Optional;


/**
 * 用户登录信息存储接口。
 * 用于管理用户的第三方登录信息（如微信、QQ、邮箱等）。
 *
 * @param <TUser> 用户实体类型
 */
public interface UserLoginStore<TUser> {

    /**
     * 为指定用户添加一个登录方式。
     *
     * @param user  用户实体
     * @param login 登录信息（如第三方平台、唯一标识等）
     */
    void addLogin(TUser user, UserLoginInfo login);

    /**
     * 移除指定用户的某个登录方式。
     *
     * @param user          用户实体
     * @param loginProvider 登录提供方（如 "wechat"、"qq"）
     * @param providerKey   提供方唯一标识
     */
    void removeLogin(TUser user, String loginProvider, String providerKey);

    /**
     * 获取指定用户的所有登录方式。
     *
     * @param user 用户实体
     * @return 登录信息列表
     */
    List<UserLoginInfo> getLogins(TUser user);

    /**
     * 通过登录方式查找用户。
     *
     * @param loginProvider 登录提供方
     * @param providerKey   提供方唯一标识
     * @return 匹配的用户（如存在）
     */
    Optional<TUser> findByLogin(String loginProvider, String providerKey);
}